if ((res = eval_tree(tree->data.internal.left, matched_terminals)) != 0) res = eval_tree(tree->data.internal.right, matched_terminals);
return (tree->op & NOTPAT) ? !res : res;
}
else { /* sequential evaluation */
if ((res = eval_tree(tree->data.internal.left, matched_terminals)) == 0) res = eval_tree(tree->data.internal.right, matched_terminals);
return (tree->op & NOTPAT) ? !res : res;
}
}
else {
fprintf(stderr, "Eval on bad tree: returning false\n");
return 0; /* safety sake, but cannot happen! */
}
}
/* [first, last) = C-style range for which we want the words in terminal-values' patterns: 0..num_terminals for !ComplexBoolean, term/term otherwise */